package com.baofu.trade.service;

import com.baofu.trade.model.KlineData;
import com.baofu.trade.model.PriceRange;
import com.baofu.trade.model.PriceBreakoutAnalysis;
import com.baofu.trade.model.indicator.MACDResult;
import java.util.List;
import java.util.Map;
import java.time.LocalDateTime;

public interface MarketDataService {
    /**
     * 获取K线数据
     * @param symbol 交易对（例如：BTCUSDT）
     * @param interval K线间隔（1m,3m,5m,15m,30m,1h,2h,4h,6h,8h,12h,1d,3d,1w,1M）
     * @param limit 获取数量，最大1000
     * @return K线数据列表
     */
    List<KlineData> getKlineData(String symbol, String interval, Integer limit);
    
    /**
     * 获取最新价格
     * @param symbol 交易对
     * @return 最新价格
     */
    String getLatestPrice(String symbol);

    /**
     * 获取指定周期内的最高价和最低价
     * @param symbol 交易对
     * @param interval K线间隔
     * @param limit 获取数量
     * @return 包含最高价、最低价、最高价时间、最低价时间的Map
     */
    Map<String, String> getHighLowPrice(String symbol, String interval, Integer limit);

    /**
     * 获取关键位
     * @param symbol 交易对
     * @param interval K线间隔
     * @param limit 获取数量
     * @return 包含关键位的Map
     */
    Map<String, String> getKeyLevels(String symbol, String interval, Integer limit);

    List<KlineData> getFuturesKlineData(String symbol, String interval, Long startTime, Long endTime, Integer limit);

    MACDResult getMACD(String symbol, String interval, Integer limit);

    /**
     * 获取历史K线数据
     *
     * @param symbol 交易对符号
     * @param interval K线间隔
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param limit 获取数量（可选）
     * @return K线数据列表
     */
    List<KlineData> getHistoricalKlineData(String symbol, String interval, LocalDateTime startTime, 
        LocalDateTime endTime, Integer limit);

    /**
     * 获取指定日期范围内的价格极值
     *
     * @param symbol 交易对符号
     * @param interval K线间隔
     * @param days 需要统计的天数
     * @return 价格区间信息
     */
    PriceRange getPriceRange(String symbol, String interval, int days);

    /**
     * 分析价格突破情况
     *
     * @param symbol 交易对符号
     * @param interval K线间隔
     * @param days 需要统计的天数
     * @return 价格突破分析结果
     */
    PriceBreakoutAnalysis analyzePriceBreakout(String symbol, String interval, int days);
} 